<?php 
namespace app\index\wechat;

class Wechatpre{

	//验证消息
	function valid(){
		if($this->chkSignature()){
			echo input('get.echostr');
		}else{
			echo 'error';
			exit;
		}
	}
	

	//验证签名
	function chkSignature(){
		//加密签名
		$signature=input('get.signature');
		//时间戳
		$timestamp=input('get.timestamp');
		//随机数
		$nonce=input('get.nonce');
		//随机字符串
		$echostr=input('get.echostr');
		//token
		$token=config('token');

		//字典序排序
		$tmpArr=array($token,$timestamp,$nonce);
		sort($tmpArr,SORT_STRING);
		//拼接字符串，进行sha1加密
		$tmpStr=implode($tmpArr);
		$tmpStr=sha1($tmpStr);

		//加密签名的比较
		if($tmpStr==$signature){
			return true;
		}else{
			return false;
		}
	}

	// 接收消息
	function receiveMsg(){
		// 获取原生的post过来的数据
		$postStr=$GLOBALS['HTTP_RAW_POST_DATA'];
		if(!$postStr){
			echo 'erro';
			exit;
		}else{
			// 得到的xml原生数据变成php对象
			$o=simplexml_load_string($postStr);
			$this->chkMsgType($o);
		}
	}

	// 判断接收消息的类型
	/**
	 * @param o string
	 * @return xml
	 */
	function chkMsgType($o){
		switch ($o->MsgType) {
			//接收到文本消息
			case 'text':
				// $this->replyText($o,$o->Content);
				$arr=[
					[
					'Title'=>'李冰冰',
					'Description'=>'国际影星',
					'PicUrl'=>'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487697586179&di=ed2562d91e6dc3ec258323718bfe83c4&imgtype=0&src=http%3A%2F%2Fimg.bimg.126.net%2Fphoto%2FAYNvS4vA2A-bEWHlCRXQNg%3D%3D%2F3722225092038531448.jpg',
					'Url'=>'http://www.jzcoder.com',
					],
					[
					'Title'=>'李冰冰2',
					'Description'=>'国际影星fda',
					'PicUrl'=>'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487698238073&di=c1a98dff139745120dcb330ab195871a&imgtype=0&src=http%3A%2F%2Fimg457.ph.126.net%2F-cH_fsW6Yd6BSaKfCkDrXA%3D%3D%2F1575415444650233776.jpg',
					'Url'=>'http://www.ittaoli.com',
					],
				];
				$this->replyArticle($o,$arr);
				break;
			//接收到图片消息
			case 'image':
				$this->replyImage($o,$o->MediaId);
				break;
			//接收到语音消息
			case 'voice':
				$this->replyVoice($o,$o->MediaId);
				break;
			// 接收到视频消息
			case 'video':
				$arr=[
					'ToUserName'=>$o->FromUserName,
					'FromUserName'=>$o->ToUserName,
					'CreateTime'=>time(),
					'MediaId'=>$o->MediaId,
					'Title'=>'这是回复的视频',
					'Description'=>'这是回复的视频描述',
				];
				$this->replyVideo($o,$arr);
				// $this->replyText($o,'收到了视频');
				break;
			//接收 事件推送
			case 'event':
				$this->receiveEvent($o);
				break;
			default:
				# code...
				break;
		}
	}

	//接收事件
	function receiveEvent($o){
		switch($o->Event){
			case 'subscribe':
				$this->replyText($o,'欢迎关注我们的公众号');
				break;

			default:

				break;
		}
	}

	// 回复图文消息
	function replyArticle($o,$arr){
		$xml='<xml>
			<ToUserName><![CDATA['.$o->FromUserName.']]></ToUserName>
			<FromUserName><![CDATA['.$o->ToUserName.']]></FromUserName>
			<CreateTime>'.time().'</CreateTime>
			<MsgType><![CDATA[news]]></MsgType>
			<ArticleCount>'.count($arr).'</ArticleCount>
			<Articles>';
		for($i=0;$i<count($arr);$i++){
			$xml.='<item>
			<Title><![CDATA['.$arr[$i]['Title'].']]></Title> 
			<Description><![CDATA['.$arr[$i]['Description'].']]></Description>
			<PicUrl><![CDATA['.$arr[$i]['PicUrl'].']]></PicUrl>
			<Url><![CDATA['.$arr[$i]['Url'].']]></Url>
			</item>';
		}

		$xml.='</Articles>
			</xml> ';
		echo $xml;
	}

	// 回复视频消息
	function replyVideo($o,$arr){
		$xml='<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%d</CreateTime>
			<MsgType><![CDATA[video]]></MsgType>
			<Video>
			<MediaId><![CDATA[%s]]></MediaId>
			<Title><![CDATA[%s]]></Title>
			<Description><![CDATA[%s]]></Description>
			</Video> 
			</xml>';
		echo sprintf($xml,$o->FromUserName,$o->ToUserName,time(),'v4Aqmh6Y_oD1jNE30-VRpDljB1r1KrSWBaqEmt_15bJuV_VsGL3sxpqtoAUPa-FB','Title','Description');
	}

	// 回复文本消息
	function replyText($o,$content=''){
		$xml='<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%d</CreateTime>
			<MsgType><![CDATA[text]]></MsgType>
			<Content><![CDATA[%s]]></Content>
			</xml>';
		echo sprintf($xml,$o->FromUserName,$o->ToUserName,time(),$content);
	}

	// 回复图文消息
	function replyImage($o,$mediaid=''){
		$xml='<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%d</CreateTime>
			<MsgType><![CDATA[image]]></MsgType>
			<Image>
			<MediaId><![CDATA[%s]]></MediaId>
			</Image>
			</xml>';
		echo sprintf($xml,$o->FromUserName,$o->ToUserName,time(),$mediaid);
	}

	// 回复语音消息
	function replyVoice($o,$mediaid=''){
		$xml='<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%d</CreateTime>
			<MsgType><![CDATA[voice]]></MsgType>
			<Voice>
			<MediaId><![CDATA[%s]]></MediaId>
			</Voice>
			</xml>';
		echo sprintf($xml,$o->FromUserName,$o->ToUserName,time(),$mediaid);
	}


	// 获取access_token
	function getAccessToken(){
		if(cache('access_token')){
			return cache('access_token');
		}else{
			// access_token地址
	    	$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.config('appID').'&secret='.config('appsecret');
	    	$res=curl($url);
	    	cache('access_token',$res['access_token'],7100);
	    	return $res['access_token'];
		}
	}

	// 获取网页的access_token
	function getWebAccessToken($code){
		$url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('appID').'&secret='.config('appsecret').'&code='.$code.'&grant_type=authorization_code';
		return curl($url);
	}



}